第5章 安全かつ高速なHTTPSサーバの構築
必要なモジュールと最低限の設定
code:最低限の設定
server {
# TLSの有効化
lister 443 ssl;
server_name secure.example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/vert.key;
ssl_password_file /etc/nginx/ssl/cert.password;
...
}
table:ssl_certificateディレクティブ
構文 ssl_certificate 証明書のファイルパス;
デフォルト値 なし
コンテキスト http, server
解説 サーバ証明書を指定する
table:ssl_certificate_keyディレクティブ
構文 ssl_certificate_key 秘密鍵のファイルパス;
デフォルト値 なし
コンテキスト http, server
解説 サーバ証明書の秘密鍵を指定する
table:ssl_password_fileディレクティブ
構文 ssl_password_file パスフレーズを記入したファイルパス;
デフォルト値 なし
コンテキスト http, server
解説 サーバ証明書の秘密鍵のパスフレーズを指定する
安全なHTTPS通信を提供するために
OpenSSLのバージョンを確認
nginxが使用しているOpenSSLのバージョンを確認するにはnginx -Vコマンドで確認でき、
SSLv3を無効化
SSLv3はTLSv1.0が策定される前にしようされていた古いプロトコルのため、互換性に問題がなければ無効にすることが推奨されている。
table:ssl_protocolsディレクティブ
構文 ssl_protocols [SSLLv] [SSLv3] [TLSv1] [TLSv1.1] [TLS1.2];
デフォルト値 TLSv1, TLSv1.1, TLSv1.2
コンテキスト http, server
解説 HTTPS通信で利用するプロトコルを指定する
暗号化スイートを明示的に指定
ssl_cipherディレクティブにMozillaWiliの最新版をコピーする。
table:ssl_cipherディレクティブ
構文 ssl_cipher 暗号化スイートリスト;
デフォルト値 HIGH:!aNULL:MD5;
コンテキスト http, server,
解説 HTTPS通信で利用する暗号化スイートのリストを指定する
DHパラメータファイルを指定
鍵交換方式でECDHEまたはDHEを使用するDHパラメータを指定する
SHA-2(SHA-256)サーバ証明書を利用
HTTP/2またはSPDYによる通信の高速化
SPDY/3.1規格はHTTP/2廃止されている。
TLSセッション再開によるハンドシェイクの高速化
OCSPステープリングによるサーバ証明書検証コストの削減
従来はサーバ証明書が有効かどうかに証明書失効リスト(Certificate Revocation List)を使っていたが、OCSPで高速に証明書の有効確認を行う。 複数のドメインを1台のサーバで運用するには
TLSでは通信の全てが暗号化されているため、暗号化を解除するまでHostヘッダの内容を知ることができないため、どのバーチャルサーバの設定を使用すればいいかserver_nameディレクティブのまっリングを解決できない。
SNI(Server Name Indication)の使用 SNIは暗号化されているHTTPS通信においてリクエストするホスト名を送信先サーバに伝えるための使用
ワイルドカード証明書、またはSAN(Subject Alternative Name)オプションによる設定
SNIに対応していないブラウザに対応する場合、ワイルドカード証明書またはSANオプションをしようする。
証明書ごとに異なるIPアドレスの割り当て
ワイルドカード証明書が利用できない場合には、証明書ごとに異なるIPアドレスを割り当てる。